/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bettosimport.controllers;

import com.bettosimport.entidades.Familia;
import com.bettosimport.entidades.Linea;
import com.bettosimport.entidades.Marca;
import com.bettosimport.entidades.Producto;
import com.bettosimport.negocio.ProductoNeg;
import com.bettosimport.negocio.ProveedorNeg;
import com.bettosimport.negocio.TablasMaestrasNeg;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 *
 * @author Neil
 */
@Controller
public class TablasMaestrasController {

    @RequestMapping(value = "/productos", method = RequestMethod.GET)
    public String productos(ModelMap map, HttpSession sesion) {
        int suc = (int) ((Object[]) sesion.getAttribute("user"))[3];
        map.addAttribute("titulo", "Listado de Productos");
        try {
            map.addAttribute("lineas", lineas());
            map.addAttribute("familias", familias());
            map.addAttribute("sucprod", ProductoNeg.Instancia().productos(suc, 0, 0));
        } catch (Exception ex) {
        }
        return "logistica/productos";
    }

    @RequestMapping(value = "/frmproductos/{prod}", method = RequestMethod.GET)
    public String frmproductos(@PathVariable(value = "prod") int prod, ModelMap map) {
        map.addAttribute("titulo", "Formulario Producto");
        Producto p = new Producto();
        try {
            Map<String, String> marcas;
            marcas = new LinkedHashMap<>();
            for (Marca m : TablasMaestrasNeg.Instancia().marcas()) {
                marcas.put(String.valueOf(m.getId_marca()), m.getDesc_marca());
            }
            if (prod != 0) {
                p = ProductoNeg.Instancia().buscarProductos(prod);
            }
            map.addAttribute("marcas", marcas);
            map.addAttribute("lineas", lineas());
            map.addAttribute("familias", familias());
            map.addAttribute("producto", p);
        } catch (Exception e) {
        }
        return "logistica/frmProducto";
    }

    @RequestMapping(value = "/guardarproducto", method = RequestMethod.POST)
    public String guardarproducto(@RequestParam("id_prod") int id_prod,
            @RequestParam("desc_prod") String desc_prod, @RequestParam("model_prod") String model_prod,
            @RequestParam("marca.id_marca") int id_marca, @RequestParam("familia.id_fam") int id_fam, ModelMap map) {

        String accion = "";
        Producto p = new Producto();
        p.setId_prod(id_prod);
        p.setDesc_prod(desc_prod);
        p.setModel_prod(model_prod);
        Marca m = new Marca();
        m.setId_marca(id_marca);
        p.setMarca(m);
        Familia f = new Familia();
        f.setId_fam(id_fam);
        p.setFamilia(f);
        if (id_prod == 0) {
            accion = "add";
        } else {
            accion = "edit";
        }

        try {
            ProductoNeg.Instancia().guardarproducto(p, accion);
        } catch (Exception ex) {
        }

        return "redirect:productos";
    }

    @RequestMapping(value = "/frmopcionesproducto/{prod}", method = RequestMethod.GET)
    public String frmopcionesproducto(ModelMap map, @PathVariable(value = "prod") int prod, HttpSession sesion) {
        map.addAttribute("titulo", "Formulario Producto");
        int suc = (int) ((Object[]) sesion.getAttribute("user"))[3];
        try {
            map.addAttribute("precios", ProductoNeg.Instancia().preciosDeProductos(suc, prod));
        } catch (Exception ex) {
        }
        return "logistica/frm_opciones_producto";
    }

    @RequestMapping(value = "/proveedores", method = RequestMethod.GET)
    public String frmopcionesproducto(ModelMap map) {
        map.addAttribute("titulo", "Proveedor");
        try {
            map.addAttribute("proveedores", ProveedorNeg.Instancia().listarProveedores());
        } catch (Exception ex) {
        }
        return "logistica/proveedores";
    }

    @RequestMapping(value = "/tablasmaestras/{tipo}", method = RequestMethod.GET)
    public String tablasmaestras(@PathVariable(value = "tipo") int tipo, ModelMap map) {
        try {
            map.put("tipo", tipo);
            map.addAttribute("lineas", lineas());
            if (tipo == 1) {
                map.put("lineas", TablasMaestrasNeg.Instancia().lineas());
            }
            if (tipo == 2) {
                map.put("familias", TablasMaestrasNeg.Instancia().familias(0));
            }
            if (tipo == 3) {
                map.put("marcas", TablasMaestrasNeg.Instancia().marcas());
            }
            if (tipo == 4) {
                map.put("sucursales", TablasMaestrasNeg.Instancia().sucursales());
            }
        } catch (Exception ex) {
        }
        if (tipo == 0) {
            return "logistica/tablasmaestras";
        } else {
            return "logistica/datostablasmaestras";
        }
    }

    @RequestMapping(value = "/buscartablamaestra/{tipo}/{id}", method = RequestMethod.GET)
    public @ResponseBody
    Object buscartablamaestra(@PathVariable(value = "tipo") int tipo, @PathVariable(value = "id") int id) {
        try {
            if (tipo == 1) {
                return (Object) TablasMaestrasNeg.Instancia().buscarLinea(id);
            }
            if (tipo == 2) {
                return (Object) TablasMaestrasNeg.Instancia().buscarFamilia(id);
            }
            if (tipo == 3) {
                return (Object) TablasMaestrasNeg.Instancia().buscarMarca(id);
            }
            if (tipo == 4) {
                return (Object) TablasMaestrasNeg.Instancia().buscarSucursal(id);
            }
        } catch (Exception ex) {
        }
        return null;
    }

    @RequestMapping(value = "/familias/{linea}", method = RequestMethod.GET)
    public @ResponseBody
    ArrayList<Familia> familias(@PathVariable(value = "linea") int linea) {
        ArrayList<Familia> familias = null;
        try {
            familias = TablasMaestrasNeg.Instancia().familias(linea);
        } catch (Exception ex) {
        }
        return familias;
    }

    @RequestMapping(value = "/guardarmodificarTM", method = RequestMethod.POST)
    public @ResponseBody
    int familias(@RequestParam("tipo") String tipo, @RequestParam("cod") int cod,
            @RequestParam("desc") String desc, @RequestParam("param") int param) {
        int valor = 0;
        try {
            valor = TablasMaestrasNeg.Instancia().guardarmodificarTM(new Object[]{tipo, cod, desc, param});
        } catch (Exception ex) {
        }
        return valor;
    }

    public Map<String, String> lineas() {
        Map<String, String> lineas;
        lineas = new LinkedHashMap<>();
        try {
            for (Linea l : TablasMaestrasNeg.Instancia().lineas()) {
                lineas.put(String.valueOf(l.getId_linea()), l.getDesc_linea());
            }
        } catch (Exception ex) {
        }
        return lineas;
    }

    public Map<String, String> familias() {
        Map<String, String> familias;
        familias = new LinkedHashMap<>();
        try {
            for (Familia l : TablasMaestrasNeg.Instancia().familias(0)) {
                familias.put(String.valueOf(l.getId_fam()), l.getDesc_fam());
            }
        } catch (Exception ex) {
        }
        return familias;
    }

}
